/**
 * 通用页面基础配置配置
 */
// 初始化数据
export function initData(name = "xxx", title = "xxx", keyName = "id") {
  return {
    name: name,
    props: {
      value: {
        type: [String, Number, Array],
        default: ''
      },
      placeholder: {
        type: String,
        default: `请选择${title}`
      },
      clearable: {
        type: Boolean,
        default: true
      },
      disabled: {
        type: Boolean,
        default: false
      },
      multiple: {
        type: Boolean,
        default: false
      },
      filterable: {
        type: Boolean,
        default: true
      },
      // 是否为列数据
      isCol: {
        type: Boolean,
        default: false
      },
      // 可以在调用时传入
      queryParams: {
        type: Object,
        default: () => ({})
      },
      // 是否自动加载
      autoLoad: {
        type: Boolean,
        default: true
      },
      colMap: {
        type: [String, Number, Array, Object],
        default: ''
      },
    },
    data() {
      return {
        options: [],
        loading: false,
        hasLoaded: false,
      };
    },
    computed: {
      selectedValue: {
        get() {
          if (this.multiple) {
            return this.value;
          }
          return Number(this.value) ? Number(this.value) : this.value;
        },
        set(val) {
          this.$emit('input', val);
        }
      },
      getCol: {
        get() {
          // return [10]
          let xx = this.options.map(x => {
            return [String(x[keyName]), x]
          });
          let map = new Map(xx);

          let idArr = String(this.value).split(",");
          let ret = []

          for ( const id of idArr) {
            let aa = map.get(id)
            if (aa) {
              ret.push(map.get(id))
            }
          }
          return ret;
        }
      }


    },
    watch: {
      // 监听查询参数变化，重新加载数据
      queryParams: {
        deep: true,
        handler(newParams) {
          if (this.hasLoaded) {
            this.reload();
          }
        }
      },

    },
    created() {
      if (this.autoLoad) {
        this.loadList();
      }
    },
  }
}


///~ 基础方法
export function baseMethods(listObj) {
  return {
    async loadList() {
      try {
        this.loading = true;
        // 使用传入的查询参数，如果没有传入则使用空对象
        const params = this.queryParams || {};
        const response = await listObj(params);
        this.options = response.data || response.rows || [];
        this.hasLoaded = true;
      } catch (error) {
        console.error('加载${title}选项失败:', error);
        this.options = [];
        this.$message.error('加载${title}数据失败');
      } finally {
        this.loading = false;
      }
    },

    handleChange(value) {
      this.$emit('change', value);
      if (this.options.length === 0 && !this.hasLoaded && this.autoLoad) {
      }
      // 如果单选，可以同时返回选中的完整对象信息
      if (!this.multiple && value) {
        // const selecteObj = this.options.find(item => item.deptId === value);
        // this.$emit('select', selecteObj);
      }
    },

    handleFocus() {
      // 获取焦点时，如果没有数据且未加载过，则加载数据
      if (this.options.length === 0 && !this.hasLoaded && this.autoLoad) {
        this.loadList();
      }
    },

    // 外部可调用的方法：重新加载选项
    reload() {
      ///~
    },

  }
}
